{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Lithography Simulation with Python - Notebook\n",
    "\n",
    "In this notebook we present some insights about the simulation of the **lithographic process**. This document is not intended to provide a complete description of the mechanisms at stake when dealing with lithography but rather give some elements about what's going on and how to simulate it. \n",
    "<img src=\"img/intro_image.png\" width=\"750\" />\n",
    "<h3 align=\"center\">Some illustrations of what we will achieve at the end of this notebook.</h3>\n",
    "\n",
    "Complete description of lithography simulation can be found in numerous textbooks (see <i>References</i> below) but numerical implementation is usually not describe thoroughly. The Jupyter NoteBook is a perfect support to share the numerical aspects relative to the simulation of lithography. We will limit our development to scalar models for imaging, valid for numerical aperture up to 0.5 ~ 0.6. Such models are not suited to cutting edge lithography equipments, though they are of paramount importance to understand more complex systems. With time, the vectorial aspect of light could be added/discussed within the framework of this notebook.\n",
    "\n",
    "For it is now the most commonly used language we will use Python, the codes are actually running on Python 3.6\n",
    "\n",
    "Reader of this notebook are assumed to possess fundamental knowledge about lithography. For those who don't, reading the references at the bottom of this paragraph is strictly recommend but we propose here a very short reminder. \n",
    "\n",
    "The Figure below describes the most important elements inside a photolithography tool, namely, the source <b>S</b>, optical lenses <b>(Lc0, Lc1, L1, L2)</b>, pupils <b>(P1, P2)</b>, photomask <b>(M)</b> and substrate.\n",
    "\n",
    "<img src=\"img/projection_printing.png\" width=\"750\" height=\"60\" />\n",
    "<h3 align=\"center\">Simplified outline of elements constituting a photolithography equipement.</h3>\n",
    "\n",
    "Optical lithography is a process by which patterns written on a physical support (**a photomask**) are optically transferred to a substrate covered with a polymer: a **photoresist**. Classicaly, optical lithography is composed of two parts : the *exposition* of the photoresist and its *developement*. In its simplest form the photomask is composed of areas of constant transmission that are opaque or transparent to an illumination. Patterns on the photomask are in the order of the wavelentgh of illumination, thus optical diffraction happens. A projection lens recombines the figure of diffraction of the mask, turns it back into an image and projects it on the substrate applying a magnification at the same time (patterns on the mask are 4 or 5 times larger than the image projected on the substrate. The image received by the substrate of the photomask is called the aerial image. Because of diffraction and aberration effects in the projection optics this image is not a perfect replication of the mask patterns.\n",
    "\n",
    "The notebook starts with a presentation of the aerial image computation. Two approachs will be presented: the Abbe and Hopkins integration schemes. Numerical implementation of the two approachs will be given and assessed on classic mask test cases.\n",
    "\n",
    "The second part of the notebook will adress the simulation of the exposition: how the aerial image propagates into the photoresist and what chemical changes are happening. Finally, the simulation of development, the process by which the photoresist is selectively removed from the substrate, will be described. For this notebook only *i-line* resists will be considered.\n",
    "\n",
    "*References*\n",
    "\n",
    "- [Mack, C. (2012). *Fundamental Principles of Optical Lithography*. The Science of Microfabrication, John Wiley & Sons](https://www.wiley.com/en-us/Fundamental+Principles+of+Optical+Lithography%3A+The+Science+of+Microfabrication-p-9780470018934)\n",
    "\n",
    "- [Mack, C. A. (1997). *Inside Prolith. A Comprehensive Guide to Optical Lithography Simulation*, FINLE Technologies (Austin, TX: 1997)](http://www.lithoguru.com/scientist/litho_papers/Inside_PROLITH.pdf)\n",
    "\n",
    "- [Wong, A. K. K. (2005). *Optical imaging in projection microlithography* (Vol. 66). SPIE press.\n",
    "](https://spie.org/Publications/Book/612961?SSO=1)\n",
    "\n",
    "- [Levinson, H. J. (2005). Principles of lithography (Vol. 146). SPIE press.](https://books.google.fr/books?hl=fr&lr=&id=EjMpqEy07bsC&oi=fnd&pg=PR9&dq=principle+of+lithography+levinson&ots=cn2u3PSee8&sig=ZjZBFrd2x99owYIw3-EQ0ekxh3o&redir_esc=y#v=onepage&q=principle%20of%20lithography%20levinson&f=false)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Aerial image formulation\n",
    "\n",
    "There is a lot to say about the theory of imaging, but in this notebook we will directly go to the imaging equation that describe the optical aspect of photolithography. In the framework of Fourier optics and scalar diffraction theory the intensity received by a substrate is written as :\n",
    "\n",
    "$$I(x,y)=\\idotsint_{\\infty}^{-\\infty} \\tilde{J}(f,g)\\tilde{H}(f+f',g+g')\\tilde{H}^*(f+f'',g+g'')\\tilde{O}(f',g')\\tilde{O}(f'',g'') \\\\ \n",
    "\te^{-2i\\pi[(f'-f'')x+(g'-g'')y]}dfdgdf'dg'df''dg''$$\n",
    "\n",
    "All functions will be defined in the next sections, but we can already name them:\n",
    "- $\\tilde{J}(f,g)$ is the effective source, it represents the spectrum of plane waves incident on the mask.\n",
    "- $\\tilde{H}(f,g)$ is the projection lens transfer function, it represents the frequency cutoff applied by the projection lens aperture to the mask spectrum but also the lens aberrations.\n",
    "- $\\tilde{O}(f,g)=\\mathcal{F}[O]$ is the mask Fourier transform (also called mask spectrum)\n",
    "\n",
    "The $\\tilde{}$ notation means that the function is expressed in the frequency domain.\n",
    "Two numerical implentations are possible to compute this equation: the Abbe and Hopkins approach.\n",
    "Before giving the numerical implementation each function of the imaging equation will be described.\n",
    "\n",
    "*References*\n",
    "- [M., & Wolf, E. (2013). Principles of optics: electromagnetic theory of propagation, interference and diffraction of light. Elsevier.](https://www.cambridge.org/core/books/principles-of-optics/D12868B8AE26B83D6D3C2193E94FFC32)\n",
    "- [Goodman, J. W. (2005). Introduction to Fourier optics. Roberts and Company Publishers.](http://www.opticsjournal.net/post/ifo.pdf)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Mask  ${O}(x,y)$ and Mask Fourier Transform  $\\tilde{O}(f,g)$ definitions\n",
    "Both Abbe and Hopkins methods require the computation of the mask Fourier Transform: $\\tilde{O}(f,g)$.\n",
    "$$\\mathcal{F}[O]:f,g\\mapsto \\tilde{O}(f,g)=\\iint_{\\infty}^{-\\infty}O(x,y)e^{-2i\\pi(xf+gy)}dxdy$$\n",
    "For the sake of simplicity and to make computation faster we are going to consider a one dimensional mask ${O}(x)$.\n",
    "$$\\mathcal{F}[O]:f\\mapsto \\tilde{O}(f)=\\int_{\\infty}^{-\\infty}O(x)e^{-2i\\pi xf}dx$$\n",
    "We start by a simple example : a mask made of a quartz hole centered on the *x* axis.\n",
    "The mask function $O(x)$ correspond to its optical transmission. For chrome on glass photomask, this function is binary. The glass does not block incident light, the transmission is 1. Chromium blocks light, its transmission is 0."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1162,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1163,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Define the chromium dot size in nanometers\n",
    "dot_size=250.\n",
    "# Define the mask support (x support)\n",
    "# Since we compute FT, better to chose a 2^n number of points\n",
    "x_support=np.linspace(-1000.,1000.,128)\n",
    "# Compute the pixel size in nanometers\n",
    "dx=2000./128\n",
    "# Define the mask, 1 for glass, 0 for chromium\n",
    "mask=[1 if np.abs(x)<dot_size/2 else 0 for x in x_support]\n",
    "# Plot\n",
    "plt.title('Mask Transmission')\n",
    "plt.plot(x_support, mask)\n",
    "plt.xlabel('x position [nm]')\n",
    "plt.ylabel('Mask transmission')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "From there we compute **the Fourier Transform** of the mask.  \n",
    "With numeric Fourier Transform one has to use the shift function to recenter the low frequency at the center for both spectrum and support. With also compute the analytic Fourier Transform of the mask: the Fourier Transform of a hole is a sinc function <font color=red>(Careful for normalisation, do not forget pixel size !)</font>."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1164,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Computation of the mask TF and its frequency support\n",
    "mask_ft=np.fft.fftshift(np.fft.fft(mask))\n",
    "# Do not forget the pixel size d when creating the frequency support\n",
    "freq_support=np.fft.fftshift(np.fft.fftfreq(128,d=dx))\n",
    "# Analytical Fourier Transform\n",
    "mask_ana_ft=np.sinc(freq_support * dot_size)*dot_size/dx\n",
    "# Plotting section\n",
    "plt.title('Mask Fourier Transform')\n",
    "plt.plot(freq_support,np.abs(mask_ft),label='Numeric FT')\n",
    "plt.plot(freq_support,np.abs(mask_ana_ft),'o',label='Analytic FT')\n",
    "plt.legend()\n",
    "plt.xlabel('Frequency [1/nm]')\n",
    "plt.ylabel('Mask spectrum')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Source definition\n",
    "\n",
    "The source **(S)** illuminates the mask **(M)** at different angles of incidence depending on its shape.\n",
    "In lithography, the source is imaged by a collection lens **(Lc0)** at the entrance pupil **(P1)** of a another lens **(L1)**. The optical configuration used is called **Köhler illumination** and it is illustrated on the Figure below. This configuration ensures that a source point creates a set of plane waves uniformly illuminating the mask at a specific angle relative to the optical axis.\n",
    "\n",
    "The source point on the optical axis (green point) creates a set of plane waves parallel to the optical axis. As the source points moves further from the optical axis the angle of incidence on the mask increases. The **Köhler illumination** ensures the uniform illumination of the mask: each point of the mask receives the same amount/directional light.\n",
    "\n",
    "<img src=\"img/kohler.png\" width=\"500\" height=\"60\" />\n",
    "<h3 align=\"center\">Köhler illumination principle : illumination of the mask</h3>\n",
    "\n",
    "- **S**: source\n",
    "- **Lc0**: collection lens 0\n",
    "- **P1**: entrance pupil of L1\n",
    "- **L1**: lens 1\n",
    "- **M**: mask plane\n",
    "\n",
    "Different shapes of source exist, the most simple one is the circular source, defined by its radius $\\sigma$ that corresponds to the source **coherence**.\n",
    "The source coherence in lithography shouldn't be mistaken with the general meaning of coherence in optics. In lithography, all source points are considered to be incoherent with each other from a spatial point of view. They do not have any phase relationship with each other. However the source is coherent from a temporal point of view since it is monochromatic. This consideration is the starting point of the Abbe theory : the overall image can be computed as the incoherent sum of each source point contribution.\n",
    "\n",
    "Depending on the $\\sigma$ value the source is said to be:\n",
    "- Coherent if $\\sigma=0$ : there is only one source point that is spatially coherent with itself.\n",
    "- Incoherent if $\\sigma=\\inf$ : infinity of source points no spatial coherence.\n",
    "- Partially coherent if $0<\\sigma<\\inf$\n",
    "\n",
    "In pratice all sources used in lithography are partially coherent. But many textbooks use a coherent source to present fundamental properties of imaging before moving to partially coherent source.\n",
    "\n",
    "If we consider a circular source of coherence $\\sigma$ the image of the source through the optical system is also circular, it is a circle of radius $\\frac{\\sigma NA}{\\lambda}$. In a photolithography tool the image of the source is projected at the entrance pupil of the projection lens **(P2)**.\n",
    "\n",
    "<font color=red> The image of the source at the entrance pupil of the projection lens is called</font> **<font color=red>the effective source</font>**<font color=red>. It is not the Fourier Transform of the source ! It is an image of the source that is projected on the same plane as the mask spectrum. Thus, it is convenient to express it on a frequency support.</font>\n",
    "\n",
    "The Figure below continues the ray tracing of the previous Figure in absence of a mask. The effective source is located at the P2 plane.\n",
    "\n",
    "<img src=\"img/kohler_full.png\" width=\"750\" height=\"60\" />\n",
    "<h3 align=\"center\">Köhler illumination principle : source effective at P2</h3>\n",
    "\n",
    "- **Lc1**: collection lens 1\n",
    "- **P2** : entrance pupil of L2, of radius NA\n",
    "- **L2** : projection lens\n",
    "\n",
    "At this point we have all the source points that contribute to the formation of the aerial image both in direct and frequency domain. \n",
    "\n",
    "The angle of incidence of the plane wave on the mask is **extremely important**. \n",
    "When illuminating an object with light parallel to the optical axis, the figure of diffraction of the object is formed at infinity (Fraunhofer diffraction regime) centered on optical axis. However, it is possible to bring this figure of diffraction to a finite distance by using a converging lens just after the object. This is exatcly what is happening in optical lithography. The source illuminates the mask and the **(Lc1)** lens brings back the infinite figure of diffraction at the entrance pupil of the projection lens. That is the reason why the effective source and the mask spectrum are expressed on the same plane (same frequency support).\n",
    "\n",
    "If the optical system is supposed to be invariant by translation: an illumination that is not parallel to the optical axis results in a shift of the figure of diffraction without changing the amplitude of the diffraction orders (this assumption stands for low NA projection lens and the absence of polarisation). The frequency shift $\\Delta f$ associated to an oblique illumination $\\theta$ can be compute with this formula :\n",
    "$$\\Delta f=\\frac{\\sin(\\theta)}{\\lambda}$$\n",
    "\n",
    "Since the source effective is expressed in frequency space, the frequency shift directly correspond to the frequency location of the source point.\n",
    "\n",
    "*References*\n",
    "\n",
    "- [Köhler, A. (1893). Ein neues Beleuchtungsverfahren für mikrophotographische Zwecke. Zeitschrift für wissenschaftliche Mikroskopie und für Mikroskopische Technik, 10(4), 433-440.](https://archive.org/details/cbarchive_41715_einneuesbeleuchtungsverfahrenf1893)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Projection lens definition\n",
    "\n",
    "The projection lens, as its name implies, projects the image of the mask on the substrate. We recall that the figure of diffraction of the mask is projected at the entrance pupil of the projection lens. Thanks to Fourier Optics properties of lens, the projection lens \"computes\" the inverse Fourier transform of the field at its entrance pupil before projecting it on its image plane. The dimension of the lens is not infinite : the entrance pupil corresponds to a circular aperture that blocks light that is too far from the optical axis. Consequently all diffraction orders from the figure of diffraction cannot be collected. This idea is illustrated on the Figure below, where only the zero and first diffraction order are collected (coherent illumination). Higher orders do not contribute to the image formation.\n",
    "\n",
    "<img src=\"img/bragg.png\" width=\"500\" height=\"60\" />\n",
    "<h3 align=\"center\">Collection of diffraction orders by the projection lens (coherent illumination here)</h3>\n",
    "The projection lens acts as a low pass filter for the mask Fourier Transform. The low frequencies can go trough the lens aperture unperturbed and get recombined before being projected on the substrate.\n",
    "However for frequencies larger than the projection lens cutoff frequency, the signal is lost. The cutoff frequency  $f_{cut}$ is defined as:\n",
    "$$f_{cut}=\\frac{\\text{NA}}{\\lambda}=\\frac{nsin(\\alpha)}{\\lambda}$$\n",
    "\n",
    "This frequency behavior is controlled by the projection lens numerical aperture : NA.\n",
    "Mathematically, the effect of the projection lens is described as a circular transfert function as follows:\n",
    "\n",
    "\n",
    "$$\n",
    "\\tilde{H}(f,g)=\\text{circ}\\left(\\frac{\\sqrt{f^2+g^2}}{\\frac{\\text{NA}}{\\lambda}}\\right) = \\left\\{\n",
    "    \\begin{array}{ll}\n",
    "        1 & \\mbox{if } \\sqrt{f^2+g^2}<\\frac{\\text{NA}}{\\lambda} \\\\\n",
    "        0 & \\mbox{otherwise}\n",
    "    \\end{array}\n",
    "\\right.\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now that all functions are defined we can describe the Abbe and Hopkins formulations:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Abbe's formulation of imaging\n",
    "Historically, the first implementation of the imaging equation was proposed by Abbe. With **the Abbe's formulation**, also called *source point integration*, the aerial image is the result of the incoherent sum of each source points contribution to the overall image. The equation can be rewritten as follows:\n",
    "\n",
    "$$I^{ABBE}(x,y)=\\iint_{\\infty}^{-\\infty} \\tilde{J}(f,g)\\left[\\left|\\iint_{\\infty}^{-\\infty}\\tilde{H}(f+f',g+g')\\tilde{O}(f',g')e^{-2i\\pi[f'x+g'y]}df'dg'\\right| ^2\\right]dfdg$$\n",
    "The integral boundaries can be simplified considering the finite extension of the source, it is non zero for $(f,g) \\in S$ :\n",
    "$$I^{ABBE}(x,y)=\\iint_{(f, g) \\in S} \\tilde{J}(f,g)\\left[\\left|\\iint_{\\infty}^{-\\infty}\\tilde{H}(f+f',g+g')\\tilde{O}(f',g')e^{-2i\\pi[f'x+g'y]}df'dg'\\right| ^2\\right]dfdg$$\n",
    "So what's happening there ? If we look at the term between square brackets, we can see that it corresponds to an inverse Fourier Transform of a product between $\\tilde{H}(f+f',g+g')$ and $\\tilde{O}(f',g')$. If you remember we said that for oblique illumination the figure of diffraction of the mask is shifted at the entrance pupil of the projection lens. From a numerical point of view it is easier to consider a shift of the projection lens pupil rather than shifting the mask Fourier Transform, the result is **exactly the same**.\n",
    "\n",
    "When considering a source point at $(f, g)$ the pupil is shifted accordingly at $(f+f',g+g')$. So depending on the pupil transfer function position, different portion of the mask diffraction pattern will be gathered.\n",
    "\n",
    "The Abbe's formulation is especially useful when illumination is changed such as source mask optimisation. However, most of the time, the source is fixed, and only the mask changes. For this situation the Hopkins's method is preferrable.\n",
    "\n",
    "*References*\n",
    "- [Abbe, E. (1873). Beiträge zur Theorie des Mikroskops und der mikroskopischen Wahrnehmung. Archiv für mikroskopische Anatomie, 9(1), 413-468](https://link.springer.com/article/10.1007/BF02956173)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "### Hopkins formulation of imaging\n",
    "The second implementation is **the Hopkins formulation** that was proposed 80 years later. By changing the order of integration the source and the mask contribution are splitted appart. The imaging equation is rewritten as follows:\n",
    "\n",
    "$$I^{HOPKINS}(x,y)=\\iiiint_{\\infty}^{-\\infty}TCC(f',g';f'',g'')\\tilde{O}(f',g')\\tilde{O}^{*}(f'',g'')e^{-2i\\pi[(f'-f'')x+(g'-g'')y]}df'dg'df''dg''$$\n",
    "\n",
    "This notation introduces the *Transmission Cross Coefficients (TCC)* that are defined as :\n",
    "$$TCC(f',g';f'',g'')=\\iint_{\\infty}^{-\\infty}\\tilde{J}(f,g)\\tilde{H}(f+f',g+g')\\tilde{H}^*(f+f'',g+g'')dfdg$$\n",
    "\n",
    "The Hopkins formulation is more difficult to understand. Hopefully the TCC integral compuattaion can be represented graphically.\n",
    "\n",
    "The three function in the integral are represented as circle (circular source and circular pupils) on the Figure below, the TCC coefficient is non zero when the 3 functions overlap (blue region).\n",
    "\n",
    "Computing the TCC results in evaluating the integral for all possible pupil $\\tilde{H}$ and $\\tilde{H}^*$ positions while maintaining the source $\\tilde{J}$ fixed. The integral is computed at the entrance pupil of the projection lens thus in frequency space.\n",
    "<img src=\"img/tcc_visual_computation.png\" width=\"500\" />\n",
    "<h3 align=\"center\">Representation of the TCC integral computation</h3>\n",
    "\n",
    "Once the TCC are computed they do not need to be recomputed if the mask changes. For that reason, the Hopkink's formulation is used in optical proximity correction algorithm, a discpline in which engineer optimise a photomask at fixed illumination to improve the pattern transfer into the resist.\n",
    "\n",
    "*References*\n",
    "\n",
    "- [Hopkins, H. H. (1953). On the diffraction theory of optical images. Proceedings of the Royal Society of London. Series A. Mathematical and Physical Sciences, 217(1130)](https://doi.org/10.1098/rspa.1953.0071)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Numeric implementation for Abbe method\n",
    "\n",
    "The algorithm corresponding to the Abbe method for aerial image is constructed as follows:\n",
    "\n",
    "\n",
    "1. Computation of the effective source based on the frequency support of the mask Fourier Transform.\n",
    "2. Loop over all effective source points (reminder : each source point is a frequency).\n",
    "3. For the current source point, a shifted frequency support is generated.\n",
    "4. The shifted frequency support is used to create the shifted transfer function of the projection lens.\n",
    "5. The Fourier Transform of the mask is multiplied by the shifted transfer function of the projection lens.\n",
    "6. The inverse Fourier Transform of step 5 is computed and its squared modulus is added to the overall aerial image.\n",
    "7. Repeat step 3 to 6 for all source points.\n",
    "\n",
    "The code for a 1D mask is described below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1165,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "def compute_abbe(sigma, NA, wavelength, mask_ft, frq, make_plots=False):\n",
    "    # Define the effective source points of the circular source\n",
    "    source_points=[f for f in frq if np.abs(f)<=sigma*NA/wavelength]\n",
    "    # Initialisation of the aerial image as single precision\n",
    "    aerial_image=np.zeros_like(mask_ft,dtype='float32')\n",
    "    # Compute all source points contribution to the aerial image\n",
    "    for freq_src in source_points:\n",
    "        # Shift of the frequency support relative to the current source point frequency\n",
    "        freq_msk_shft = [(f - freq_src) for f in frq]\n",
    "        # Shifted transfer function of the projection lens.\n",
    "        pupil_shifted = [1 if np.abs(f) <= NA/wavelength else 0 for f in freq_msk_shft]\n",
    "        # The shifted transfer function of the projection lens is applied to the mask spectrum\n",
    "        mask_lpf = np.multiply(mask_ft, pupil_shifted)\n",
    "        # Add the contribution of the current src point to the overall aerial image\n",
    "        aerial_image += np.abs(np.fft.ifft(mask_lpf)) ** 2\n",
    "    # Normalisation with number of source points\n",
    "    aerial_image /= len(source_points)\n",
    "    # Plotting\n",
    "    if make_plots:\n",
    "        fig=plt.figure()\n",
    "        plt.title(f'Aerial Image - {len(source_points)} source points')\n",
    "        plt.plot(x_support,aerial_image)\n",
    "        plt.xlabel('x position [nm]')\n",
    "        plt.ylabel('Intensity [au]')\n",
    "        plt.show()\n",
    "    else:\n",
    "        return aerial_image"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The Figure below let you change different parameters to see the impact on the aerial image.<br>\n",
    "<font color=red> <b>Unfortunately interactive widget do no run on GitHub please download and run the Jupyter File on your local machine to use this feature.</b></font>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1166,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e7e14d913fea46e1a2eb999a1ce72af5",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "interactive(children=(FloatSlider(value=0.5, description='sigma', max=1.0, step=0.01), FloatSlider(value=0.4, …"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Uncomment to use interactive mode\n",
    "from ipywidgets import interact, interactive, fixed, interact_manual\n",
    "import ipywidgets as widgets\n",
    "interact(compute_abbe, sigma=(0.0,1.0,0.01),NA=(0.2,0.6,0.01), wavelength=[('436nm', 436), ('365nm', 365),('248nm', 248), ('193nm', 193)],mask_ft=fixed(mask_ft),frq=fixed(freq_support),make_plots=fixed(True));"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In case interactive plot does not show, we plot below the result for an i-line stepper."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1167,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "compute_abbe(sigma=0.7,NA=0.57,wavelength=365.,mask_ft=mask_ft,frq=freq_support,make_plots=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Another common benchmark is to compute the aerial image of a knife edge also called Heavyside function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1168,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Heavyside mask creation\n",
    "n_pts=128\n",
    "x_suppt_heavyside=np.linspace(0,10000.,n_pts)\n",
    "mask_heavyside=[1 if x>=5000 else 0 for x in x_suppt_heavyside]\n",
    "# Pixel size in nanometers\n",
    "dx_heavyside=10000./n_pts\n",
    "# Computation of the mask TF and its frequency support\n",
    "mask_ft_heavyside=np.fft.fftshift(np.fft.fft(mask_heavyside))\n",
    "freq_support_heavyside=np.fft.fftshift(np.fft.fftfreq(n_pts,d=dx_heavyside))\n",
    "# Analytical Fourier Transform first shift, then TF\n",
    "mask_ana_ft_heavyside=np.exp(-1j * 2. * np.pi * freq_support_heavyside * 2500)\n",
    "mask_ana_ft_heavyside*=np.sinc(freq_support_heavyside * 5000.)*5000./dx_heavyside\n",
    "# Plotting section\n",
    "fif,ax=plt.subplots(1,2,figsize=(15,5))\n",
    "ax[0].set_title('Mask Transmission')\n",
    "ax[0].plot(x_suppt_heavyside,mask_heavyside)\n",
    "ax[0].set_xlabel('Position [nm]')\n",
    "ax[0].set_ylabel('Transmission')\n",
    "# FT plot\n",
    "ax[1].set_title('Mask Fourier Transform')\n",
    "ax[1].plot(freq_support_heavyside,np.abs(mask_ft_heavyside),label='Numeric')\n",
    "ax[1].plot(freq_support_heavyside,np.abs(mask_ana_ft_heavyside),'o',label='Analytic')\n",
    "ax[1].set_xlabel('Frequency [1/nm]')\n",
    "ax[1].set_ylabel('Amplitude')\n",
    "ax[1].legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's compute the aerial image for different source coherence to show the impact of this parameter:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1169,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(7,4))\n",
    "# Loop over different coherence values\n",
    "for sigma in [0.2, 0.6, 0.8]:\n",
    "    aerial_image_heavyside=compute_abbe(sigma=sigma,NA=0.28,wavelength=436.,mask_ft=mask_ft_heavyside,frq=freq_support_heavyside)\n",
    "    plt.plot(x_suppt_heavyside,aerial_image_heavyside,label=f'$\\sigma$ : {sigma}')\n",
    "plt.xlim(3000.,8000.)\n",
    "plt.xlabel('Intensity')\n",
    "plt.xlabel('x position [nm]')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can compare our model result with the plot of the original article:\n",
    "\n",
    "- [O'Toole, M. M., & Neureuther, A. R. (1979). *Influence of partial coherence on projection printing. In Developments in Semiconductor Microlithography IV* (Vol. 174, pp. 22-27). International Society for Optics and Photonics.](https://spie.org/Publications/Proceedings/Paper/10.1117/12.957174)\n",
    "\n",
    "\n",
    "<img src=\"img/neureuther_coherence_heavyside.PNG\" width=\"500\" />"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Numeric implementation for Hopkins method\n",
    "<font color=red> <b>Make sure that the support for the mask definition is strictly positive for Hopkins formulation.</b></font>\n",
    "\n",
    "The algorithm corresponding to the Hopkins method for aerial image is constructed as follow\n",
    "1. The first step is to compute the TCC coefficients.\n",
    "2. For all non zero TCC compute the equation of Hopkins equation\n",
    "3. Normalise aerial image with aerial image for a clear mask (only quartz)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1170,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Initialisation of the TCC list\n",
    "tcc_list=[]\n",
    "def tcc_computation(sigma, NA, wavelength, freqs):\n",
    "    # Function radius (= cutoff frequencies) \n",
    "    f_cut_src = sigma * NA / wavelength\n",
    "    f_cut_pupil = NA / wavelength\n",
    "    # Source creation\n",
    "    y_src = [1 if np.abs(f) <= f_cut_src else 0 for f in freqs]\n",
    "    # k factor definition\n",
    "    k = 2 * np.pi / wavelength\n",
    "    # Loop over diffractions orders for the first pupil\n",
    "    for idx_m, f_m in enumerate(freqs):\n",
    "        # The first pupil is created via a shifted frequency support\n",
    "        freq_pup_1 = [f - f_m for f in freqs]\n",
    "        y_pup1 = [1 if np.abs(f) <= f_cut_pupil else 0 for f in freq_pup_1]\n",
    "        # Loop over diffractions orders for the second pupil\n",
    "        for idx_n, f_n in enumerate(freqs):\n",
    "            # The second pupil is also created via a shifted frequency support\n",
    "            freq_pup_2 = [f - f_n for f in freqs]\n",
    "            y_pup2 = [1 if np.abs(f) <= f_cut_pupil else 0 for f in freq_pup_2]\n",
    "            # Integral computation of the overlapping three functions\n",
    "            product = np.multiply(y_src, np.multiply(y_pup1, y_pup2))\n",
    "            #The overlapping area is computed with a trapezoidal integration\n",
    "            area = np.trapz(product, freqs)\n",
    "            # If the TCC coefficient is non zero it is added to the TCC list\n",
    "            if np.abs(area) > 0:\n",
    "                tcc_list.append((idx_m, idx_n, f_m, f_n, area))\n",
    "\n",
    "    print('Number of TCC :', len(tcc_list))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1171,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of TCC : 269\n"
     ]
    }
   ],
   "source": [
    "tcc_computation(0.4, 0.28, 436.,freq_support_heavyside)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Once the TCC are calculated the Hopkins implementation is straightforward:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1172,
   "metadata": {},
   "outputs": [],
   "source": [
    "def compute_hopkins(mask_ft, freq_suppt, x_suppt, tcc_list, pixel_size):\n",
    "        # Compute the mask Fourier transform conjugate\n",
    "        mask_ft_conj = np.conjugate(mask_ft)\n",
    "        # Instanciate aerial image\n",
    "        aerial_image = np.zeros_like(mask_ft)\n",
    "        # Loop over all TCC coefficients\n",
    "        for idx_m, idx_n, f_m, f_n, tcc_mn in tcc_list:\n",
    "            exp_term = np.exp(1j * 2 * np.pi * (f_m - f_n) * (x_suppt-pixel_size/2))\n",
    "            aerial_image += tcc_mn * mask_ft[idx_m] * mask_ft_conj[idx_n] * exp_term\n",
    "        return np.real(aerial_image)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We propose to compute the aerial image of the Heavyside mask that has already be defined previously."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1173,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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qsYBFGdVts4boyfbq8qx8DjqupRMpRZcB3z44YeUlpYyduxYSktL2bBhAwBXXXUV1157LaeffjojR47kySefbPXdp556ilNOOYXKykpmzJjBHXcECzqfddZZ3HLLLYwfP56RI0fy0ksvAbB8+XLGjx/PuHHjGDt2LKtXr+66C5XUVTYXnz8NqjZiOL2qN3PT3ruoP/pcPLeged7cAqygf9TDbGvsxd7Hrg+6LPH9XZcamCIZJGVbcLfNX86KTTsTeszRg/ry04uObzNPdXU148aN27e9bds2Jk+eDMD111/PFVdcwZVXXskf//hHpk2bxuOPPw7A+vXreeGFF1i7di1nn302a9as2XeMxx57jF//+tcsWLCAQw45pNU56+vref3111mwYAG33XYbzzzzDLNnz+YHP/gBX/va16itraWhoSERVSDpbtHMVl2O+exl6LbFcNGs1i0yaD74BPCcAnqSQ179rubHbuq6VCtOMkTKBrhkKSgo4K233tq3fd999+2bFPqVV17h0UcfBeAb3/gGN9988758l156KVlZWYwYMYLhw4fz3nvvAfDcc8+xdOlSnn76afr27Rv1nBdffDEAJ554IuvXrwfglFNO4ec//znl5eVcfPHFjBgxIuHXKunHq8qj9zpWlQeBKVZwigh8VjqdgkeviZ4vxrM8kXSUsgGuvZZWKogcqt9y2H7T9vDhw1m3bh3vv/8+JSUlUY+Tl5cHQHZ2NvX19QBcfvnlnHTSSTz11FOcf/753HPPPXzhC1/ojMuQNLFk/TYG+QAGW5RnbYXFsb8YLfAtmhl2TzZX1eMwer01h5znfqZnc5L29AyuA0499VQeeughAO6//34mTJiwb9/DDz9MY2Mja9euZd26dYwaNQqAo446ikcffZQrrriC5cuXx32udevWMXz4cKZNm8bkyZMpKytL7MVIWllfuZtr/rSUe/OvwHNaP2vb1x0Zr9Lpwfci1Foej+8ZQ/3j39ezOckICnAdMGvWLO69917Gjh3Ln//8Z37zm9/s2zdq1CjOPPNMJk2axOzZs8nPz2+27/777+eSSy5h7dq1cZ1rzpw5jBkzhnHjxvHee+9xxRVXJPx6JD1s313LN+9bAsDXv30TNnkWFA4BLPh50ayOt7DGXhp8L+I4Pb78n1zSZwX57G2eV68VSJoyd0/KiUtKSrzlgqcrV67k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\n",
      "text/plain": [
       "<Figure size 504x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# First we compute the aerial image of a clear mask\n",
    "mask_quartz=np.ones_like(mask_ft_heavyside)\n",
    "aerial_image_norm=compute_hopkins(mask_ft=np.fft.fftshift(np.fft.fft(mask_quartz)),\n",
    "                                  freq_suppt=freq_support_heavyside,\n",
    "                                  x_suppt=x_suppt_heavyside,\n",
    "                                  tcc_list=tcc_list,pixel_size=dx_heavyside)\n",
    "# Compute aerial image of the heavyside mask\n",
    "aerial_image_hopkins=compute_hopkins(mask_ft=mask_ft_heavyside, freq_suppt=freq_support_heavyside,\n",
    "                                     x_suppt=x_suppt_heavyside, tcc_list=tcc_list,pixel_size=dx_heavyside)\n",
    "# Recompute aerial image with Abbe to compare both models\n",
    "aerial_image_abbe=compute_abbe(sigma=0.4,NA=0.28,wavelength=436.,mask_ft=mask_ft_heavyside,frq=freq_support_heavyside)\n",
    "# Plot Hopkins and Abbe aerial image on same plot\n",
    "plt.figure(figsize=(7,4))\n",
    "plt.title('Hopkins vs Abbe')\n",
    "plt.plot(x_suppt_heavyside,aerial_image_hopkins/aerial_image_norm,label='Hopkins')\n",
    "plt.plot(x_suppt_heavyside,aerial_image_abbe,'o',label='Abbe')\n",
    "plt.xlim(3000.,8000.)\n",
    "plt.xlabel('Intensity')\n",
    "plt.xlabel('x position [nm]')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The result is almost exactly the same, there is a little shift that can be accounted on the trapezoidal integration method used for the TCC computation."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exposition Model\n",
    "\n",
    "The next step in simulating the lithographic process is the exposition of the resist. During lithography the resist is exposed to a certain energy : **the dose**. In lithography the surfacic power of the source is fixed, and expressed in W/m²:\n",
    "$$\\text{lamp power}=S^P [\\text{W}/m²]$$\n",
    "The **dose** is expressed as a surfacic energy, it corresponds to the time of exposition times the lamp power:\n",
    "$$ \\text{Dose}=S^P \\cdot t^{expo} [\\text{J/m²}]$$\n",
    "The mask modulates the incident energy received by the resist. The local intensity received by the resist is the dose times the aerial image value at this particular point. The top surface of the resist receives the following energy:\n",
    "$$ \\text{energy at resist surface point x}=Dose \\cdot I(x) $$\n",
    "The energy received at the top of the resist propagates inside the resist (*z* axis) and triggers photochemical reactions.\n",
    "The most simple model to simulate the light absorption through the photoresist is a Beer Lambert absorption.\n",
    "$$I(x,z)=I(x)e^{-\\alpha z}$$\n",
    "- $I(x,z)$ is called the **bulk image** it is the light intensity distribution inside the photoresist.\n",
    "- $\\alpha$ is the absorption coefficient of the resist it can be expressed with two equations :\n",
    "$$\\alpha=A\\cdot m(x,z)+B=\\frac{4\\pi \\kappa}{\\lambda}$$\n",
    "- A and B are Dill's coefficient of the resist, usually supplied by the resist manufacturer. There is also a C coefficient.\n",
    "- $\\kappa$ is the extinction coefficient of the resist.\n",
    "- $\\lambda$ is the wavelength.\n",
    "The code below presents the computation of light absorption through a resist stack of thickness 1µm. The mask is a single hole centered on origin computed at the beginning of the notebook."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1174,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Choose an alpha coefficient\n",
    "alpha= 0.0005\n",
    "# Compute the aerial image\n",
    "aerial_image=compute_abbe(sigma=0.7,NA=0.57,wavelength=365.,mask_ft=mask_ft,frq=freq_support,make_plots=False)\n",
    "# Create a meshgrid corresponding to the resist coordinates in x and z direction\n",
    "nz=50\n",
    "thickness=1000.\n",
    "dz=thickness/nz\n",
    "z=np.linspace(0,thickness,nz)\n",
    "X,Z=np.meshgrid(x_support,z)\n",
    "# Instanciate bulk image, the aerial image is stacked with itself nz times.\n",
    "aerial_image=np.stack([aerial_image for _ in range(nz)])\n",
    "bulk_ini=np.stack(aerial_image,0)\n",
    "# Apply beer Lambert absorption\n",
    "bulk_img=bulk_ini*np.exp(-alpha*Z)\n",
    "# Plotting section\n",
    "fig,ax=plt.subplots(1,1,figsize=(12,5))\n",
    "ax.imshow(bulk_img,extent = [np.min(x_support) , np.max(x_support), thickness ,0])\n",
    "ax.arrow(600,200,-100,-150,color='r',width=12)\n",
    "ax.text(400,300,'Resist Surface',color='r',weight='bold',size=15)\n",
    "ax.set_xlabel('x position [nm]')\n",
    "ax.set_ylabel('Resist height [nm]')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Up to now, we only discussed the light intensity inside the photoresist. Of course this energy will affect the resist chemical properties. An i-line photoresist is composed of 3 components:\n",
    "- A polymer slightly soluble into a developement solution.\n",
    "- A photoacid coumpound (PAC) that is fixed to the polymer and totally prevent its dissolution.\n",
    "- A solvant that binds the polymer and PAC together.\n",
    "\n",
    "During exposition, light will decompose the PAC, thus increasing the polymer solubility to the developer.\n",
    "When simulating resist exposition, it is the PAC concentration that is going to be of interest.\n",
    "The normalised PAC concentration inside the photoresist is called **latent image**. It is defined as $m$. At the beginning of exposition the PAC concentration is set to 1 everywhere in the photoresist. The evolution of the PAC concentration is related to the bulk image by the Dill's equations (See Reference below):\n",
    "\n",
    "$$\\frac{\\partial m(x,z,t)}{\\partial t}=-C\\cdot I(x,z,t) \\cdot m(x,z,t) $$\n",
    "$$\\frac{\\partial I(x,z,t)}{\\partial z}=-\\left[A\\cdot m(x,z,t)+B\\right]I(x,z,t) $$\n",
    "\n",
    "- A, B and C are the photoresist Dill's coefficient.\n",
    "\n",
    "Without any assumption the equations cannot be solved simustaneously. The trick is to decompose the total exposition time $t_{expo}$ into small time steps $\\Delta t$. With this assumption the partial equation can be solved and the bulk image and latent image computed alternatively with :\n",
    "\n",
    "$$m(x,z,t+\\Delta t)=m(x,z,t)e^{-C\\cdot I(x,z,t)\\Delta t}$$\n",
    "$$I(x,z,t+\\Delta t)=I(x,z;\\alpha=A\\cdot m(x,z,t)+B)=I(x)e^{-[A\\cdot m(x,z,t)+B]z}$$\n",
    "\n",
    "*Reference*\n",
    "- [Dill, F. H., Hornberger, W. P., Hauge, P. S., & Shaw, J. M. (1975). Characterization of positive photoresist. IEEE Transactions on electron devices, 22(7), 445-452.](https://ieeexplore.ieee.org/abstract/document/1477994)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The numerical scheme for the simulation of exposition is the following:\n",
    "0. Compute the time step $\\Delta t$\n",
    "1. $t=0 \\mapsto$  Compute initial bulk image $I(x,z,t=0)$ and initial latent image $m(x,z,t=0)=1$\n",
    "\n",
    "2. $t=\\Delta t\\mapsto$  Update latent image: $m(x,z,t=\\Delta t)=m(x,z,t=0)e^{-C\\cdot I(x,z,t=0)\\Delta t}=e^{-C\\cdot I(x,z,t=0)\\Delta t}$\n",
    "\n",
    "3. $t=\\Delta t\\mapsto$ Update alpha: $\\alpha=A\\cdot m(x,z,t=\\Delta t)+B$\n",
    "4. $t=\\Delta t\\mapsto$ Update bulk image: $I(x,z,t+\\Delta t)=I(x)e^{-\\alpha z}$\n",
    "5. $t_{tot}= \\Delta t$.\n",
    "6. $t=2\\Delta t\\mapsto$  Update latent image: $m(x,z,t=2\\Delta t)=m(x,z,t=\\Delta t)e^{-C\\cdot I(x,z,t=\\Delta t)\\Delta t}$\n",
    "7. $t=2\\Delta t\\mapsto$ Update alpha: $\\alpha=A\\cdot m(x,z,t=2\\Delta t)+B$\n",
    "8. $t=2\\Delta t\\mapsto$ Update bulk image: $I(x,z,t+\\Delta t)=I(x)e^{-\\alpha z}$\n",
    "9. $t_{tot}= 2\\Delta t$.\n",
    "10. Repeat until $t_{tot}= t_{expo}$.\n",
    "\n",
    "Implementation of this code is presented below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1175,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Initialise latent image\n",
    "lat_img=np.ones_like(bulk_img)\n",
    "# Instanciate resist parameters A in [1/nm], A in [1/nm] and C in [m²/J]\n",
    "dill_a=0.00075\n",
    "dill_b=0.00005\n",
    "dill_c=0.0025"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1176,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Typical lamp power in W/m²\n",
    "lamp_power=30000\n",
    "# Dose in J/m²\n",
    "dose=2000\n",
    "# Exposure time in s\n",
    "t_tot=dose/lamp_power\n",
    "n_steps=50\n",
    "# Discretize exposure time\n",
    "time_step=t_tot/n_steps\n",
    "# Loop to compute exposition\n",
    "for n in range(n_steps):\n",
    "    # Latent image update\n",
    "    lat_img*=np.exp(-dill_c*bulk_img*time_step*lamp_power)\n",
    "    # Absorption coefficient update\n",
    "    alpha=dill_a*lat_img+dill_b\n",
    "    # Bulk image update\n",
    "    bulk_img=bulk_ini*np.exp(-alpha*Z)\n",
    "    \n",
    "fig,ax=plt.subplots(1,1,figsize=(12,5))\n",
    "ax.set_title('Latent image after exposition')\n",
    "ax.imshow(lat_img,extent=[np.min(x_support) , np.max(x_support), thickness ,0])\n",
    "ax.text(-7.5,800,'Low PAC concentration',color='r',weight='bold',size=15,rotation=90)\n",
    "ax.text(-750,800,'High PAC concentration',color='r',weight='bold',size=15,rotation=90)\n",
    "ax.text(750,800,'High PAC concentration',color='r',weight='bold',size=15,rotation=90)\n",
    "ax.set_xlabel('x position [nm]')\n",
    "ax.set_ylabel('Resist height [nm]')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Development model\n",
    "Once the latent image at the end of exposition is known the next step is to compute the developement process.\n",
    "Depending on dose received by the resist, the latent image dictates whether the resist is developed or not. For positive resist exposed areas are removed while un-exposed area are left.\n",
    "- The simplest way to simulate developement is using a **threshold developement model**. Depending on a threshold value $m_{th}$ for the latent image, the resist is considered to be developed or not. For example if the threshold\n",
    " is set to 0.4, every point of the resist with latent image value smaller than 0.4 will be developed. All point with latent image bigger than 0.4 are not developped. Numerically this methods is simply a contour finding algorithm.\n",
    "For complex patterning, this approach is not precise enough.\n",
    "\n",
    "During developement the photoresist is in contact with a liquid developer for a time $t_{dev}$. The developer \"eats up\" the resist as time pass. From a mathematical point of view, the photoresist developement can be modelled by an eikonal equation:\n",
    "\n",
    "$$|\\nabla T(x,y,z)|R(x,y,z)=1$$\n",
    "\n",
    "Where $T(x,y,z)$ is the time needed for the developer to reach the point located at $(x,y,z)$ and $R(x,y,z)$ is the developer speed inside the photoresist in nm/s, also called development rate function. Multiple development rate functions exist (Mack 4 parameters, Mack 5 parameters, Dill function, LPM...)\n",
    "\n",
    "As example, we will use the 4-parameters Mack development rate function:\n",
    "\n",
    "$$R(x,y,z)=r_{max}\\frac{(a+1)(1-m(x,y,z))^n}{a+(1-m(x,y,z))^n}+r_{min}$$\n",
    "Where $a$ is expressed as:\n",
    "$$a=\\frac{n+1}{n-1}(1-m_{th})^n$$\n",
    "- $n$ is the reaction order\n",
    "- $m_{th}$ is the threshold concentration\n",
    "- $r_{min}$ is the minimum development rate [nm/s]\n",
    "- $r_{max}$ is the maximum development rate [nm/s]\n",
    "\n",
    "*References*\n",
    "- [Mack, C. A. (1987). Development of positive photoresists. Journal of the Electrochemical Society, 134(1), 148.](https://iopscience.iop.org/article/10.1149/1.2100396/meta)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1177,
   "metadata": {},
   "outputs": [],
   "source": [
    "# This function computes the developement rate according to the 4 parameters model from Mack.\n",
    "def Mack_Developement_Rate(latent_img, m_th, r_min, r_max, n):\n",
    "    a_mack = (1 - m_th) ** n\n",
    "    a_mack *= (n + 1) / (n - 1)\n",
    "    dev_rate = (a_mack + 1) * (1 - latent_img) ** n\n",
    "    dev_rate /= a_mack + (1 - latent_img) ** n\n",
    "    dev_rate *= r_max\n",
    "    dev_rate += r_min\n",
    "    dev_rate = np.clip(dev_rate, r_min, r_max)\n",
    "    return dev_rate\n",
    "# Computation of the development rate with typical parameters\n",
    "cur_dev_rate=Mack_Developement_Rate(latent_img=lat_img, m_th=0.01, r_min=0.8, r_max=50, n=2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Once the development rate is computed, the developer speed inside the resist is known everywhere. \n",
    "The substrate is developed during a certain amount of time: $t_{dev}$. The last part of the development simulation is to find the developer front position at this moment.\n",
    "\n",
    "The final resist profile corresponds to the envelop $T(x,y,z)=t_{dev}$\n",
    "\n",
    "$$|\\nabla T(x,y,z)|=\\frac{1}{R(x,y,z)}$$\n",
    "$$\\sqrt{\\left(\\frac{\\partial T}{\\partial x}\\right)^2+\\left(\\frac{\\partial T}{\\partial y}\\right)^2+\\left(\\frac{\\partial T}{\\partial z}\\right)^2}=\\frac{1}{R(x,y,z)}$$\n",
    "\n",
    "It is possible to consider that the development path is strictly vertical:\n",
    "$$\\frac{dT}{dz}=\\frac{1}{R(x,y,z)}$$\n",
    "In that case the computation of $T(x,y,z)$ is straightforward:\n",
    "$$T(x,y,z)=\\int_{0}^{d}\\frac{dz}{R(x,y,z)}$$\n",
    "\n",
    "The integral method is cmputed below. The red contour corresponds to the resist profile at  $t_{dev}=60s$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1178,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from scipy.integrate import cumtrapz\n",
    "time_resist_z = cumtrapz(1. / cur_dev_rate, dx=dz, axis=0,initial=0)\n",
    "fig,ax=plt.subplots(1,1,figsize=(12,5))\n",
    "ax.set_title('Resist profile computed with vertical integration')\n",
    "ax.imshow(time_resist_z, extent=[np.min(x_support) , np.max(x_support), thickness ,0])\n",
    "ax.contour(X,Z,time_resist_z,levels=[60,],colors='r')\n",
    "ax.set_xlabel('x position [nm]')\n",
    "ax.set_ylabel('Resist height [nm]')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the general case the development path is not strictly vertical. In this situation, the use of **fast marching algorithm** is required. The fast marching algorithm is an iterative solver for the eikonal equation. It requires an oriented field (for the propgation direction) and a speed field. The algorithm computes the time required for the speed field to reach each point in the field. This approach was initially proposed by Sethian, see reference:\n",
    "\n",
    "*Reference*\n",
    "- [Sethian, J. A. (1996, June). Fast-marching level-set methods for three-dimensional photolithography development. In Optical Microlithography IX (Vol. 2726, pp. 262-272). International Society for Optics and Photonics.](https://www.spiedigitallibrary.org/conference-proceedings-of-spie/2726/0000/Fast-marching-level-set-methods-for-three-dimensional-photolithography-development/10.1117/12.240962.short?SSO=1)\n",
    "\n",
    "Computation with fast marching algorithm is shown below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1179,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import skfmm\n",
    "# Fast Marching require a negative frontier to compute travel time\n",
    "# We add this frontier artifically (it will be removed later)\n",
    "neg_layer = -1 * np.ones_like(lat_img[0, :])\n",
    "lat_img = np.vstack((lat_img, neg_layer))\n",
    "cur_dev_rate = np.vstack((neg_layer, cur_dev_rate))\n",
    "# Compute fast marching (! the algorithm flips the array along axis 0)\n",
    "time_resist_fmm = skfmm.travel_time(lat_img, cur_dev_rate, dx=[dz, dx],periodic=[False,True])\n",
    "# Remove artificial negative layer\n",
    "time_resist_fmm=time_resist_fmm[1:,:]\n",
    "# Flip array back to normal\n",
    "time_resist_fmm=np.rot90(time_resist_fmm,k=2)\n",
    "# Plotting\n",
    "fig,ax=plt.subplots(1,1,figsize=(12,5))\n",
    "ax.set_title('Resist profile computed with fast marching algorithm')\n",
    "ax.imshow(time_resist_fmm, extent=[np.min(x_support) , np.max(x_support), thickness ,0])\n",
    "ax.contour(X,Z,time_resist_fmm,levels=[60,],colors='r')\n",
    "ax.set_xlabel('x position [nm]')\n",
    "ax.set_ylabel('Resist height [nm]')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next we plot the two resist profiles on the same graph to highlight the differences:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1180,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig,ax=plt.subplots(1,1,figsize=(12,5))\n",
    "ax.set_title('Resist profile computed with fast marching algorithm and z integration')\n",
    "ax.contour(X,Z,time_resist[::-1,:],levels=[60,],colors='g')\n",
    "ax.arrow(350,450,-40,0,color='g',width=7)\n",
    "ax.text(375, 425, 'Fast Marching Method',color='g',weight='bold',size=15)\n",
    "ax.contour(X,Z,time_resist_z[::-1,:],levels=[60,],colors='r')\n",
    "ax.arrow(350, 600,-95,0,color='r',width=7)\n",
    "ax.text(375,575, 'Z integration',color='r',weight='bold',size=15)\n",
    "ax.set_xlabel('x position [nm]')\n",
    "ax.set_ylabel('Resist height [nm]')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Conlusion\n",
    "\n",
    "In this Notebook we have seen:\n",
    "\n",
    "- The imaging equation and how to simulate the aerial image with Abbe and Hopkins formulation\n",
    "- The simulation of exposition.\n",
    "- Different approachs for the simulation of development.\n",
    "\n",
    "In the next Notebook we will adress:\n",
    "\n",
    "- Aberrations of the projection lens with the case of defocus.\n",
    "- Application of the defocus to the propagation of aerial image in the resist.\n",
    "- Effect of standing waves and how to simulate them."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1181,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "<style>\n",
       ".output_png {\n",
       "    display: table-cell;\n",
       "    text-align: center;\n",
       "    vertical-align: middle;\n",
       "}\n",
       "</style>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 1181,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Code to automatically center the matplotlib figures\n",
    "from IPython.core.display import HTML\n",
    "HTML(\"\"\"\n",
    "<style>\n",
    ".output_png {\n",
    "    display: table-cell;\n",
    "    text-align: center;\n",
    "    vertical-align: middle;\n",
    "}\n",
    "</style>\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Author credentials:\n",
    "\n",
    "**Pierre Chevalier**, PhD candidate.\n",
    "pierrechevalier63@gmail.com\n",
    "\n",
    "<a href=\"https://www.linkedin.com/in/pierre-chevalier/\" target=\"_blank\"> \n",
    "<img src=\"img/linkedIn.png\" width=75 > \n",
    "</a> <a href=\"https://scholar.google.com/citations?user=J7pBOkoAAAAJ&hl=fr&oi=sra\" target=\"_blank\"> \n",
    "<img src=\"img/Google_Scholar_logo_2015.png\" width=175 > \n",
    "</a> "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
